"""统一配置管理"""
import logging
import os
from datetime import datetime

# 服务器配置
SERVER_CONFIG = {
    'host': '120.46.132.243',
    'port': 9090,
    'timeout': 10,
    'retry_interval': 5
}

# 媒体配置
MEDIA_CONFIG = {
    'camera_id': '/dev/video-camera0',
    'camera_width': 640,
    'camera_height': 480,
    'camera_fps': 30,
    'audio_format': 16,
    'audio_channels': 1,
    'audio_rate': 16000,
    'audio_chunk': 1024,
    'media_dir': 'data',  # 更改为data目录
    'stream_interval': 0.1,
    'video_interval': 0.1,  # 视频帧发送间隔（秒）
    'video_jpeg_quality': 60,  # 视频JPEG编码质量(1-100，数值越小体积越小)
    'video_width': 480,        # 视频流发送目标宽度（降低分辨率减轻带宽）
    'video_height': 360,       # 视频流发送目标高度
    'video_send_timeout': 0.05,  # 单帧发送超时(秒)，超时则丢弃当前帧
    # 模型集成路径
    'road_offset_model_dir': os.path.join('models', 'road_offset', 'deploy'),
    'classification_model_dir': os.path.join('models', 'classification', 'raspberry_pi_deployment'),
    # 推理线程节拍（秒）
    'analysis_interval': 0.2,
    # 播报规则
    'road_offset_threshold': 0.20,  # 道路中心偏移阈值(绝对值超过则播报)
    'classification_speak_high_risk_only': False,  # True=仅高风险播报；False=检测到障碍物即播报
    'audio_interval': 0.05,  # 音频数据发送间隔（秒）
    'max_capture_files': 10,  # 最大保留的摄像头捕获文件数量
    'capture_interval': 3.0,  # 自动拍照间隔（秒）
    'ultrasonic_jump_threshold_m': 0.30,
    'ultrasonic_alert_cooldown_s': 3.0
}

# GPIO配置
GPIO_CONFIG = {
    'is_orangepi': True,
    'button_pin': 15,
    'rotary_clk_pin': 13,
    'led_pin': 18,
    'ultrasonic_trig_pin': 22,
    'ultrasonic_echo_pin': 32,
    'ultrasonic_trig_pin_name': 'gpio1_b0',
    'ultrasonic_echo_pin_name': 'gpio4_b3',
    'long_press_time': 2.0,
    'volume_step': 5,
    'max_volume': 100,
    'min_volume': 0
}

# 语音识别配置
VOICE_CONFIG = {
    'xunfei_appid': 'ad737107',
    'xunfei_api_key': '8db620857c0d6a4fb2c2950d80643495',
    'xunfei_api_secret': 'MzQ3MmJjNmFhNzBhYzdjNmNhNDg3OGI5',
    'use_mock': False  # 在非树莓派环境使用模拟语音识别
}

# 日志配置
LOG_CONFIG = {
    'log_dir': '../runtime/core_logs',
    'log_level': logging.INFO,
    'log_format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    'log_date_format': '%Y-%m-%d %H:%M:%S'
}

def setup_logging(name):
    """设置日志记录器"""
    # 创建日志记录器
    logger = logging.getLogger(name)
    logger.setLevel(LOG_CONFIG['log_level'])
    
    # 避免重复处理程序
    if not logger.handlers:
        # 控制台处理程序（总是添加）
        console_handler = logging.StreamHandler()
        console_handler.setLevel(LOG_CONFIG['log_level'])
        
        # 设置格式
        formatter = logging.Formatter(
            LOG_CONFIG['log_format'],
            datefmt=LOG_CONFIG['log_date_format']
        )
        console_handler.setFormatter(formatter)
        logger.addHandler(console_handler)
        
        # 尝试添加文件处理程序
        try:
            # 确保日志目录存在
            if not os.path.exists(LOG_CONFIG['log_dir']):
                os.makedirs(LOG_CONFIG['log_dir'], exist_ok=True)
            
            # 文件处理程序
            log_file = os.path.join(
                LOG_CONFIG['log_dir'],
                f"{name}_{datetime.now().strftime('%Y%m%d')}.log"
            )
            file_handler = logging.FileHandler(log_file, encoding='utf-8')
            file_handler.setLevel(LOG_CONFIG['log_level'])
            file_handler.setFormatter(formatter)
            logger.addHandler(file_handler)
            
        except Exception as e:
            # 如果文件日志失败，只使用控制台日志
            logger.warning(f"无法创建文件日志: {e}，仅使用控制台日志")
    
    return logger
